iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0

延續昨天的 module 課題。其實 Module 除了可以自訂之外(像我們昨天的 stuff ),node.JS 中還有許多方便內建的模組,稱作core module,要 import 這些 Module 我們直接 require(“core Module name”) 就好,使用上十分方便,下面就簡單介紹幾個 core Module 吧!

#Event

Event,中文叫事件,沒錯,就是 JavaScript 語法 addEventListener 的 Event。這個 Event Module 可以讓我們自訂事件,然後當那個事件被觸發時透過 function 去做一些事,就像那些我們在 JS 的 addEventListener 做的。

第一步:import event module

const events = require('events')

第二步:建立一個 Event Emitter 實例:

const myEmitter = new events.Eventemitter()

第三步:自訂 event 和觸發時要做的事 :

myEmitter.on('myEvent', msg => console.log(msg))

第四步:觸發事件

myEmitter.emit('myEvent', 'hello 你好嗎? 事件觸發中')

這樣就能簡單自訂和觸發事件惹
https://ithelp.ithome.com.tw/upload/images/20210907/20127352ERTsBsOk2J.png

util
util 也是一個 node 內建的 core module,這個 util module 有許多不同的功能,我們今天要使用的是 inherits,他能使某個函式實現原型繼承。

一樣我們先 import 這個 module

const util = require('util')

然後我們寫一個 function constructor:
如果對函式建構式不熟的可以看PJ大的這篇

let Person = function(name){
  this.name = name
}

然後我們現在想讓 Person 繼承 Event Emitter:

util.inherits (Person, event.EventEmitter)

//util.inherits(constructor( 建構子,繼承別人的人 ), superConstructor( 父建構子,被繼承的人))

之後用這個 function constructor 做出三個人,並將這三個人放進陣列裡用forEach跑迴圈替每個人榜上'speak'這自訂 event:

let james = new Person('james')
let mary = new Person('mary')
let ryu = new Person('ryu')

let people = [james, mary, ryu]

people.forEach(person =>{
  person.on('speak', msg => 
   console.log(`${person.name} said ${msg})
  )}
)

最後用 emit 觸發他們:


james.emit('speak', 'hey dude')
ryu.emit('speak', 'I like curry')

https://ithelp.ithome.com.tw/upload/images/20210907/20127352FesaMaC4FX.png

今天就先到這邊
我們明天見
ㄅㄅ

後記: util.inherits 這個語法已進入墳墓惹,我們點開 node.js 的 doc,他會推薦你使用es6 的 extend 和class 取代 util.inherits,下面是新的寫法


const EventEmitter = require('events');

class MyStream extends EventEmitter {
  write(data) {
    this.emit('data', data);
  }
}

const stream = new MyStream();

stream.on('data', (data) => {
  console.log(`Received data: "${data}"`);
});
stream.write('With ES6');

這邊extendclass 的介紹


上一篇
#6 - Module Patterns
下一篇
#8 - Reading & Writing Files (fs)
系列文
你遲早都要懂後端的 — Node.js 的學習筆記10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言